Java Technologies Enum কি এবং এর ব্যবহার গাইড ও নোট

362

Enum (Enumeration) একটি বিশেষ ধরনের ডেটা টাইপ যা নির্দিষ্ট সংখ্যক কনস্ট্যান্ট ভ্যালু ধারণ করে। Java তে Enum একটি ক্লাসের মতো কাজ করে তবে এটি কেবল একটি পূর্বনির্ধারিত সীমিত সেটের ভ্যালু ধারণ করে। Enum সাধারণত ফ্ল্যাগ, স্টেট, কন্ডিশন বা ডোমেইন টাইপ প্রতিনিধিত্ব করার জন্য ব্যবহৃত হয়।

MapStruct Enum ম্যাপিংয়ের জন্য একটি শক্তিশালী সমাধান প্রদান করে। MapStruct ব্যবহার করে, আপনি সহজেই একটি Enum টাইপকে অন্য Enum টাইপে বা String, Integer ইত্যাদি ভ্যালুতে ম্যাপ করতে পারেন।

এখানে Enum Mapping এর ব্যবহার এবং উদাহরণ আলোচনা করা হবে।


১. Enum কি এবং এর ব্যবহার

Enum হল একটি ডাটা টাইপ যা নির্দিষ্ট সংখ্যক নামকরা কনস্ট্যান্ট ভ্যালু ধারণ করে। Java তে Enum ক্লাসগুলি একটি নির্দিষ্ট অবস্থার মধ্যে থাকা কনস্ট্যান্টের সংগ্রহ হিসেবে ব্যবহৃত হয়। উদাহরণস্বরূপ, Days নামে একটি Enum ক্লাস হতে পারে যা সপ্তাহের সাতটি দিন ধারণ করে: সোমবার, মঙ্গলবার, বুধবার, ইত্যাদি।

Enum এর ব্যবহার:

  1. State Representation: কিছু অবস্থা বা স্টেট রিপ্রেজেন্ট করার জন্য।
  2. Flags: বিভিন্ন ফ্ল্যাগ বা সেটিংস রিপ্রেজেন্ট করতে।
  3. Predefined Values: একটি সীমিত সংখ্যক মান (যেমন, সিজনাল মাস বা ডিরেকশন) প্রতিনিধিত্ব করতে।

Enum উদাহরণ:

public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

এখানে, Day নামক Enum সপ্তাহের সাতটি দিন প্রতিনিধিত্ব করছে।


২. MapStruct Enum Mapping

MapStruct ব্যবহার করে Enum এর মানগুলো একটি Enum থেকে অন্য Enum বা অন্য ডেটা টাইপে (যেমন String, Integer) ম্যাপ করা যায়। এটি একটি সাধারণ ম্যাপিং প্রক্রিয়া যেখানে আপনি কাস্টম কনভার্টার তৈরি করতে পারেন বা স্বয়ংক্রিয়ভাবে ম্যাপিং করতে পারেন।

২.১ Basic Enum to Enum Mapping

ধরা যাক, আমাদের দুটি Enum রয়েছে: Day এবং DayDTO। আমরা Day Enum থেকে DayDTO Enum এ ম্যাপিং করতে চাই।

Day.java (Enum)
public enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
DayDTO.java (DTO Enum)
public enum DayDTO {
    MON, TUE, WED, THU, FRI, SAT, SUN
}
DayMapper.java (MapStruct Mapper)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

@Mapper
public interface DayMapper {
    DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);

    @Mapping(source = "MONDAY", target = "MON")
    @Mapping(source = "TUESDAY", target = "TUE")
    DayDTO dayToDayDTO(Day day);
}

এখানে, @Mapping অ্যানোটেশন ব্যবহার করে আমরা Day Enum এর প্রতিটি মানকে DayDTO Enum এর সংশ্লিষ্ট মানে ম্যাপ করেছি।

২.২ Enum to String Mapping

এখন, যদি আপনি Enum কে একটি String ভ্যালুতে ম্যাপ করতে চান, তাহলে এটি খুব সহজ। নিচে একটি উদাহরণ দেওয়া হল যেখানে Day Enum থেকে String এ ম্যাপ করা হচ্ছে।

DayMapper.java (Enum to String)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

@Mapper
public interface DayMapper {
    DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);

    @Mapping(source = "MONDAY", target = "Monday")
    @Mapping(source = "TUESDAY", target = "Tuesday")
    String dayToString(Day day);
}

এখানে, Day Enum এর মান String এ ম্যাপ করা হয়েছে, যেখানে MONDAY কে "Monday", TUESDAY কে "Tuesday" তে ম্যাপ করা হচ্ছে।

২.৩ Enum to Integer Mapping

কখনও কখনও Enum মানগুলোকে ইন্টিজার (Integer) টাইপে ম্যাপ করতে হতে পারে। MapStruct এই ধরনের কনভার্সনও সহজেই করতে পারে।

DayMapper.java (Enum to Integer)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

@Mapper
public interface DayMapper {
    DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);

    @Mapping(source = "MONDAY", target = "1")
    @Mapping(source = "TUESDAY", target = "2")
    int dayToInteger(Day day);
}

এখানে, Day Enum এর মানগুলিকে সংশ্লিষ্ট Integer ভ্যালুতে ম্যাপ করা হয়েছে (যেমন, MONDAY কে 1, TUESDAY কে 2).


৩. Custom Mapping for Enum Types

আপনি যদি আরো কাস্টম কনভার্সন বা ম্যাপিং চান, তবে MapStruct এর মাধ্যমে কাস্টম ম্যাপিং ফাংশনও তৈরি করতে পারেন। উদাহরণস্বরূপ, যদি Enum এর মধ্যে কোনো কাস্টম লজিক প্রয়োগ করতে হয়, যেমন কিছু কন্ডিশনাল ম্যাপিং, তবে আপনি কাস্টম কনভার্টার তৈরি করতে পারেন।

উদাহরণ: Custom Enum Mapping

ধরা যাক, আপনার Enum ক্লাসে কিছু কাস্টম লজিক প্রয়োগ করতে হবে, যেমন Day Enum এর জন্য, "Weekend" এবং "Weekday" এর মধ্যে ভাগ করা।

DayMapper.java (Custom Mapping)
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;

@Mapper
public interface DayMapper {
    DayMapper INSTANCE = Mappers.getMapper(DayMapper.class);

    @Mapping(source = "day", target = "type", qualifiedByName = "dayToType")
    DayDTO dayToDayDTO(Day day);

    @Named("dayToType")
    default String dayToType(Day day) {
        if (day == Day.SATURDAY || day == Day.SUNDAY) {
            return "Weekend";
        }
        return "Weekday";
    }
}

এখানে, আমরা Custom Mapping ফাংশন dayToType তৈরি করেছি, যা Day Enum কে "Weekend" বা "Weekday" তে কনভার্ট করবে।


৪. MapStruct Enum Mapping এর সুবিধা

  1. Automated Code Generation: MapStruct কোড জেনারেট করে, ফলে আপনাকে ম্যানুয়ালি ম্যাপিং কোড লিখতে হয় না।
  2. Compile-time Mapping: এটি compile-time এ ম্যাপিং কোড তৈরি করে, ফলে রuntime পারফরম্যান্সের ওপর কোনো নেতিবাচক প্রভাব পড়ে না।
  3. No Reflection: MapStruct রিফ্লেকশন ব্যবহার করে না, ফলে এটি দ্রুত এবং পারফরম্যান্সের জন্য কার্যকর।
  4. Custom Mappings: কাস্টম কনভার্টার এবং কাস্টম ম্যাপিং ফাংশন তৈরি করার সুবিধা।

৫. সারাংশ

MapStruct একটি শক্তিশালী টুল যা Java প্রোজেক্টে Enum Mapping সহজ করে তোলে। আপনি Enum টাইপ থেকে String, Integer বা অন্য কোনো টাইপে ম্যাপিং করতে পারেন এবং প্রয়োজনে কাস্টম ম্যাপিং ফাংশনও তৈরি করতে পারেন। MapStruct এর মাধ্যমে Enum ম্যাপিং প্রক্রিয়াটি দ্রুত, সঠিক এবং পারফরম্যান্সে উপকারী হয়, কারণ এটি compile-time কোড জেনারেশন ব্যবহার করে এবং Reflection এর প্রয়োজন পড়ে না।


Content added By
Promotion

Are you sure to start over?

Loading...